#coding:utf-8
import pickle
import getpass
'''
密码管理器
 1、主密码（retry3次给一个 提示）加密
 2、保存密码
    密码 title
    真是的密码(加密)
 3、自动成成安全密码(用户可输入长度)  (生成随机密码，能打印就行，不需要保存)
 4、密码分类
    web
    应用
    银行
    服务器
  5、获取密码
  6、密码文件的云备份
'''
main_passwd = "123456"

# 在进入密码管理器之前先判断主密码能否进去
def get_in():
    count= 0
    while count < 3:
        print("""
        ----欢迎来到熊尧同学的密码管理器-----
        操作流程如下：
                1、输入登录密码
                2、选择功能操作
                3、云存储
                4、退出系统
        """)
        input_mian_passwd = input("请输入你的登陆密码：")   #千万要注意的是input把所有输入的都当作是str
        if input_mian_passwd != main_passwd:
            print("您输入的密码有误，请重新输入，您只有三次机会！")
            count += 1
            continue
        else:
            print("密码正确,成功登陆！")
            return 0  #返回0表示密码输入正确!
    else:

        print("Input Error !")
        return 1   #返回1表示，三次都是错误输入，密码错误

#a = get_in()
#print(a)

#获取密码，应该从文件读取出来
def read_database():
    try:
        with open('data_base.pkl', 'rb') as f:
            return pickle.load(f)  #下载数据到本地,返回一个字典，字典，字典
    except IOError as e:
        return 1  #不存在文件

    except Exception as e:
        raise e  #raise  抛出错误类型


#保存密码，保存在文件中
def save_database(user_data_dict):
    try:
        with open('data_base.pkl', 'wb') as f:
            pickle.dump(user_data_dict, f)  #把字典数据保存到pickel文件
            return True
    except IOError:
        return False
    except Exception as e:
        raise e  #抛出异常


#主函数
def main():
    """
     user_data_dict =  {}  # 牛逼的三元表达式
    # 判断是否地点为空，日过为空就先存一个例子密码进去，不然到时候查看密码的时候什么都没有报错怎么办！！！

    user_data_dict["web"] = {"码云密码":"1245678910"}
    user_data_dict["应用"] = {"淘宝密码":"123456789"}
    user_data_dict["银行"] = {"建行密码":"123456"}
    user_data_dict["服务器"] = {"京峰服务器密码":"qwerfada"}
    save_database(user_data_dict)
    """
while True:
#登陆函数
        get_in()

#登陆进去，实现密码查保存的功能
        menu = """
        --------1、查看密码--------
        --------2、保存密码--------
        --------3、云保存  --------
        --------others：退出    --------
        """
        print(menu)
        order_num = str(input("请输入你要操作的数字："))

#密码的查询
        if order_num == "1":

            print("""
            ------  密码分类 -------
            ------  1、web   -------
            ------  2、应用  -------
            ------  3、银行  -------
            ------  4、服务器 ------
            ------  5、全部密码 ----            
            """)
            order_num = input("请输入你的操作数：")
            if order_num =="1":
                user_data_dict = read_database()
                print(user_data_dict["web"])
            elif order_num == "2":
                user_data_dict = read_database()
                print(user_data_dict["应用"])
            elif order_num == 3:
                user_data_dict = read_database()
                print(user_data_dict["银行"])
            elif order_num == 4:
                user_data_dict = read_database()
                print(user_data_dict["服务器"])
            elif order_num == 5:
                user_data_dict = read_database()
                print(user_data_dict)
            else:   #输入的操作数有错误，返回从头开始
                print("你输入的操作数有误，已返回！")
                continue  #continue 表示在此else上一层的while循环里面后面所有的东西都不执行了 （注意是是else所在的循环，也就是while）

#密码的保存
        elif order_num == "2":
            print("""
                   ------  请选择你要保存的密码类型 -------
                   ------  1、web类   -------
                   ------  2、应用类  -------
                   ------  3、银行类  -------
                   ------  4、服务器类 ------
                   """)
            order_num_2 = input("请输入你的操作数：")

            if order_num_2 == "1":    #web类
                user_data_dict = read_database()
                count = 0
                while count < 3 :
                    input_key = input("请输入web应用的名字(比如：码云)：")
                    input_passwd = input("请输入你需要保存的密码：")
                    input_passwd_again = input("请再次输入你需要保存的密码：")
                    if input_passwd != input_passwd_again :
                        print("两次密码输入不一致，请重新输入，你只有三次机会！")
                        continue
                    else:
                        user_data_dict["web"][input_key] = input_passwd_again
                        save_database(user_data_dict)
                        print("密码已经成功保存！")
                        """
                        #检查一下web类 有没有增加
                        user_data_dict = read_database()
                        print((user_data_dict))
                        print(user_data_dict["web"])
                        """
                        break
                print("密码错误三次，已退出！")




            elif order_num_2 == "2":   #应用类
                user_data_dict = read_database()
                count = 0
                while count < 3:
                    input_key = input("请输入应用app的名字(比如：淘宝)：")
                    input_passwd = input("请输入你需要保存的密码：")
                    input_passwd_again = input("请再次输入你需要保存的密码：")
                    if input_passwd != input_passwd_again:
                        print("两次密码输入不一致，请重新输入，你只有三次机会！")
                        continue
                    else:
                        user_data_dict["应用"][input_key] = input_passwd_again
                        save_database(user_data_dict)
                        print("密码已经成功保存！")
                        break
                print("密码错误三次，已退出！")


            elif order_num_2 == 3:  #银行类
                user_data_dict = read_database()
                count = 0
                while count < 3:
                    input_key = input("请输入银行的名字(比如：码云)：")
                    input_passwd = input("请输入你需要保存的密码：")
                    input_passwd_again = input("请再次输入你需要保存的密码：")
                    if input_passwd != input_passwd_again:
                        print("两次密码输入不一致，请重新输入，你只有三次机会！")
                        continue
                    else:
                        user_data_dict["银行"][input_key] = input_passwd_again
                        save_database(user_data_dict)
                        print("密码已经成功保存！")
                        break
                print("密码错误三次，已退出！")


            elif order_num_2 == 4: #服务器类
                user_data_dict = read_database()
                count = 0
                while count < 3:
                    input_key = input("请输入服务器的名字(比如：码云)：")
                    input_passwd = input("请输入你需要保存的密码：")
                    input_passwd_again = input("请再次输入你需要保存的密码：")
                    if input_passwd != input_passwd_again:
                        print("两次密码输入不一致，请重新输入，你只有三次机会！")
                        continue
                    else:
                        user_data_dict["服务器"][input_key] = input_passwd_again
                        save_database(user_data_dict)
                        print("密码已经成功保存！")
                        break
                print("密码错误三次，已退出！")
            else:   #输入的操作数有错误，返回从头开始
                print("你输入的操作数有误，已返回！")
                continue  #continue 表示在此else上一层的while循环里面后面所有的东西都不执行了 （注意是是else所在的循环，也就是while）
#密码的云上传
        elif order_num == 3:
            print("云保存还没有实现，打算先把数据读出来发到邮箱代替，这里只是保证逻辑，哈哈！")
#系统的退出
        else:
            print("系统成功退出，欢迎下次使用！")
            break

if __name__ == '__main__':
    main()